package com.erp.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.HttpServletRequest;

/**
 * Token 工具类  获取当前请求的 Token
 */
@Slf4j
public class TokenUtil {

    /**
     * 获取当前请求头中的 Token（对应前端的 Authorization 字段）
     *
     * @return Token 字符串（如果不存在或格式错误，返回 null）
     */
    public static String getRequestToken() {
        // 1. 获取当前请求对象
        ServletRequestAttributes requestAttributes =
                (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

        if (requestAttributes == null) {
            return null; // 非web环境下可能为null
        }

        HttpServletRequest request = requestAttributes.getRequest();
        log.info("请求URL:{}",request.getRequestURI().toString());
        // 2. 从请求头中获取 Authorization 字段（与前端拦截器的 config.headers['Authorization'] 对应）
        String authHeader = request.getHeader("Authorization");

        // 3. 直接返回 Token（前端未添加 Bearer 前缀，因此无需截取）
        return authHeader;
    }

    /*
    * @description: 判断请求头里是否有Token
    * @author: DGS
    * @date: 2025/7/22
    * @param:
    * @return: boolean
    */
    public static boolean hasToken() {
        String token = getRequestToken();
        return token != null && !token.trim().isEmpty();
    }


    /*
     * @description: 直接获取封装了userId/ companyId/ code 的DTO对象
     * @author: SHENYI
     * @date: 2025/7/20
     * @param: []
     * @return: com.erp.util.TokenDTO
     */
    public static TokenDTO getDTO() {
        String token = getRequestToken();
        log.warn("本次获取的Token:{}", token);
        TokenDTO dto = new TokenDTO();
        dto.setUserId(JwtUtil.getUserID(token));
        dto.setCompanyId(JwtUtil.getCompanyID(token));
        dto.setCode(JwtUtil.getCode(token));
        dto.setRole(JwtUtil.getRole(token));
        log.warn("本次获取的Token中的DTO:{}", dto);
        return dto;
    }
}
